package componentes;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Iterator;

public class Camino {
	
	private List listaDePosiciones;
	private String caminoFacil = "C:\\COMPILADORES\\eclipse3.2\\tpalgo3\\TowerDefence\\archivos\\caminoFacil.txt";
	private String caminoMedio = "C:\\COMPILADORES\\eclipse3.2\\tpalgo3\\TowerDefence\\caminoMedio.txt";
	private String caminoDificil = "C:\\COMPILADORES\\eclipse3.2\\tpalgo3\\TowerDefence\\caminoDificil.txt";
	/**
	 * @param listaDePosiciones
	 */
	public Camino(int Camino,Posicion[][] elTerreno) {
		this.listaDePosiciones = this.armarCamino(Camino,elTerreno);
	}
	
	private List armarCamino(int numeroDeCamino,Posicion[][] elTerreno) {
		List listaAuxiliar=new LinkedList();
		//algoritmo que calcula el camino 
		switch (numeroDeCamino) {
		case 1:
			this.formarCamino(listaAuxiliar, elTerreno,this.caminoFacil);
			break;
		case 2:
			this.formarCamino(listaAuxiliar, elTerreno,this.caminoMedio);
			break;
		case 3:
			this.formarCamino(listaAuxiliar, elTerreno,this.caminoDificil);
			break;
		}
		
		
		return listaAuxiliar;
	}
	
	private void formarCamino(List lista,Posicion[][] matriz, String nombreArchivo) {		
				//if (validoEntrada(caminoFacil, ((Terreno)matriz).getCANTIDAD_DE_FILAS(), ((Terreno)matriz).getCANTIDAD_DE_COLUMNAS())){
					FileReader fr;
					char valorCaracter = 'X';
					
				    try {
				      fr = new FileReader (new File(nombreArchivo));
				      BufferedReader br = new BufferedReader (fr);
				      String linea = br.readLine();
				      int auxColumna =0;
				      int fila =0;
				      
				      while (fila<this.cantidadFilasArchivo(nombreArchivo) ||linea != null) {
				    	  for(int i=0; i<linea.length();i++ ){
				    		  if (valorCaracter == linea.charAt(i))	lista.add(matriz[fila][i]);
				      }
				    	  fila++;
				    	  linea = br.readLine();
				    	  }
				      br.close();
				      for (int i =0; i<lista.size(); i++){
				      System.out.println(((Posicion)lista.get(i)).getNumeroDePosicion());
				      }
				    }
				    catch (Exception e) {
				      e.printStackTrace();
				    }				    
				}					  
	
	private int cantidadFilasArchivo(String nombreArchivo){
		int cantidadFilas = 0;
		FileReader fr;
	 
	    try {
	    	  fr = new FileReader (new File(nombreArchivo));
	    	  BufferedReader br = new BufferedReader (fr);
	          String linea = br.readLine();	      	 
	              while (linea != null) {
	            	  cantidadFilas++;
	            	  linea = br.readLine();
	              }
	         br.close();
	    }
	    catch (Exception e) {
	    	 e.printStackTrace();
	    }
	    return cantidadFilas;
	}
	
	public List getListaDePosiciones() {
		return listaDePosiciones;
	}
	
	public boolean verificarPosicion(int posicionABuscar) {
		Iterator iterador = listaDePosiciones.iterator();
		Posicion posicion;
		boolean buscar = false;
		while (iterador.hasNext() && ! buscar){
			posicion = (Posicion)iterador.next();
			if ( posicionABuscar == posicion.getNumeroDePosicion() )
				buscar = true;			
		}
		
		return buscar;
	}
	
	public Posicion getUltimaPosicion(){
		int cantidadDePosiciones = listaDePosiciones.size();
		Iterator iterador = listaDePosiciones.iterator();
		
		while (cantidadDePosiciones > 1){
			iterador.next();
			cantidadDePosiciones --;
		}
		
		return ( (Posicion) iterador.next() );
	}
}
